package de.fhluebeck.oop.gps.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Point;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import com.jgoodies.forms.builder.ButtonBarBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

/**
 * 
 * Beschreibung:<br>Gui für die Kategorieverwaltung.
 * @author ogb, Leif Hitzschke
 * @version 1.00, 05.11.2009
 * 
 */
public class KategorieView extends JDialog {
	
    JTable uebersicht = new JTable();
    JPopupMenu popmenu = new JPopupMenu();
    JTextField name = new JTextField();
    JTextArea description = new JTextArea(4,1);
    private KategorieController myController;
	    
	public KategorieView(JFrame owner, FrameCloseListener frameCloseListener) {
		super(owner, true);
		myController = new KategorieController(this, frameCloseListener);
		init(owner);
	}

	public void init(JFrame owner) {
		
		
        JScrollPane scrpDescription;
        JLabel lblDescription = new JLabel("Beschreibung:");
        JLabel lblName = new JLabel("Bezeichnung:");
        description.setLineWrap(true);
        description.setDocument(new JTextFieldLimit(256));
        JScrollPane scrpDescription2 = new JScrollPane();
        final String txtDialogTitle = "Übersicht Kategorien";
        
        this.setSize(500, 450);
        this.setTitle(txtDialogTitle);
        this.setResizable(false);

        JPanel mainContainer = new JPanel();
        mainContainer.setLayout(new BorderLayout());
        
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        // PopUpMenü für Löschoption
        // 
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        JMenuItem deleteItem = new JMenuItem("Kategory löschen");
        popmenu.add(deleteItem);
        deleteItem.setActionCommand("cmdDelete");
        deleteItem.addActionListener(myController);
        
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        // MainPanel
        // - In diesem Panel wird die Tabelle fuer die Darstellungen der verschiedenen Kategorien plaziert
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new GridLayout(1, 0));
        //mainPanel.setBounds(200, 200, 200, 100);
                
        JPanel tablePanel = new JPanel();
    	
        uebersicht.setPreferredScrollableViewportSize(new Dimension(480, 200));
        uebersicht.addMouseListener(myController);
        scrpDescription = new JScrollPane(uebersicht);
                
        //uebersicht.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        uebersicht.setFillsViewportHeight(true);

        tablePanel.add(scrpDescription);

        mainPanel.add(tablePanel, BorderLayout.CENTER);
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        
        
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        // Editorpanel
        // - In diesem Panel sind die Componeneten fuer die Bearbeitung der Tabelle plaziert
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        JPanel editPanel = new JPanel();
        editPanel.setBounds(0, 0, 400, 250);

        FormLayout layout = new FormLayout(
            "4dlu, 50dlu, 4dlu, 130dlu, 4dlu", // columns
            "10dlu, pref, 4dlu, top:pref, 4dlu" // rows
        );

        editPanel.setLayout(layout);

        scrpDescription2.setViewportView(description);
        
        CellConstraints cc = new CellConstraints();
        editPanel.add(lblName, cc.xy(2, 2));
        editPanel.add(name, cc.xy(4, 2));
        editPanel.add(lblDescription, cc.xy(2, 4));
        editPanel.add(scrpDescription2, cc.xy(4, 4));
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        
        
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        // Buttonpanel
        // - In diesem Panel sind die Button fuer die Aktionen plaziert
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        JPanel buttonPanel = new JPanel();
        buttonPanel.setBorder(new EmptyBorder(0, 0, 5, 5));
        buttonPanel.setLayout(new BorderLayout());
        JButton cmdNew = new JButton("Neu");
        cmdNew.setActionCommand("cmdNew");
        cmdNew.addActionListener(myController);
        
        JButton cmdSave = new JButton("Speichern");
        cmdSave.setActionCommand("cmdSave");
        cmdSave.addActionListener(myController);
        
        JButton cmdCancel = new JButton("Abbrechen");
        cmdCancel.setActionCommand("cmdCancel");
        cmdCancel.addActionListener(myController);
        
        ButtonBarBuilder builder = new ButtonBarBuilder();
        builder.addGridded(cmdNew);
        builder.addUnrelatedGap();
        builder.addGridded(cmdSave);
        builder.addUnrelatedGap();
        builder.addGridded(cmdCancel);

        buttonPanel.add(builder.getPanel(), BorderLayout.EAST);
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        // Hinzufuegen der Panel zum Hauptcontainer, sowie das Plazieren des Dialoges mittig auf dem
        // Hauptfenster
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        mainContainer.add(mainPanel, BorderLayout.NORTH);
        mainContainer.add(editPanel, BorderLayout.CENTER);
        mainContainer.add(buttonPanel, BorderLayout.SOUTH);
        
        add(mainContainer);
        
        Point parloc = owner.getLocation();
	    setLocation(parloc.x + 10, parloc.y + 10);
	    ////////////////////////////////////////////////////////////////////////////////////////////////////
	    myController.initializeFields();
    }

}
